suppressMessages(library(ComplexHeatmap))
suppressMessages(library(dplyr))
suppressMessages(library(viridis))
suppressMessages(library(SingleR))
suppressMessages(library(pheatmap))
suppressMessages(library(edgeR))
suppressMessages(library(limma))
suppressMessages(library(magrittr))
suppressMessages(library(ggbiplot))
suppressMessages(library(Seurat))
sce <- readRDS("/mnt/nmorais-nfs/marta/pA_karine/r_session/e12h-preliminary-analysis/macrophage_subset/data/sce-macrophages.rds")
srt <- readRDS("/mnt/nmorais-nfs/marta/pA_karine/r_session/e12h-preliminary-analysis/macrophage_subset/data/srt-macrophages-sorting.rds")
hvgs <- VariableFeatures(srt)

Aggregate

matrix <- t(assays(sce)$counts)
## Loading required package: SingleCellExperiment
## 
## Attaching package: 'SingleCellExperiment'
## The following object is masked from 'package:edgeR':
## 
##     cpm
matrix <- matrix[,hvgs]
matrix <- as.data.frame(matrix)
matrix <- cbind(Sample = sce$sample, matrix)
rownames(matrix) <- NULL
matrix <- aggregate(matrix[,-1], list(matrix$Sample), sum)
matrix
matrix2 <- matrix[,-1]
colnames(matrix2) <- NULL
matrix2 <- t(as.matrix(matrix2))
colnames(matrix2) <- matrix$Group.1
rownames(matrix2) <- hvgs
matrix2[1:5,1:5]
##         MCT1   MCT3    NT1  S1-NT S2-MCT
## Cxcl2 133031 134495  33205  42454 120361
## Lyz2   72297  58374 297178 162038 308028
## Ccl5  529255 526526  26671   4110   1540
## Cd74  242660 260686 357167  49946  97986
## H2-Aa 132292 136591 150824  21082  36725
dim(matrix2)
## [1] 3000   12
table(rowSums(matrix2) > 0)
## 
## TRUE 
## 3000
matrix2 <- DGEList(counts = data.matrix(matrix2))
matrix2 <- calcNormFactors(matrix2)
str(matrix2)
## Formal class 'DGEList' [package "edgeR"] with 1 slot
##   ..@ .Data:List of 2
##   .. ..$ : num [1:3000, 1:12] 133031 72297 529255 242660 132292 ...
##   .. .. ..- attr(*, "dimnames")=List of 2
##   .. .. .. ..$ : chr [1:3000] "Cxcl2" "Lyz2" "Ccl5" "Cd74" ...
##   .. .. .. ..$ : chr [1:12] "MCT1" "MCT3" "NT1" "S1-NT" ...
##   .. ..$ :'data.frame':  12 obs. of  3 variables:
##   .. .. ..$ group       : Factor w/ 1 level "1": 1 1 1 1 1 1 1 1 1 1 ...
##   .. .. ..$ lib.size    : num [1:12] 17201858 17268367 13506251 3162524 5862745 ...
##   .. .. ..$ norm.factors: num [1:12] 1.241 1.282 1.277 0.885 0.869 ...
##   ..$ names: chr [1:2] "counts" "samples"
condition = as.factor(c("MCT-12h", "MCT-12h", "NT", "NT","MCT-72h", "PT", "NT","MCT-72h","PT","PT","NT","MCT-72h"))
sample <- c("MCT1","MCT3","NT1", "Sample 1",  "Sample 2",  "Sample 3",
            "Sample 4", "Sample 5", "Sample 6", "Sample 7", "Sample 8", "Sample 9")
sorting <- c("Day4", "Day4", "Day4",
             "Day1", "Day1", 
             "Day2", "Day2", "Day2", 
             "Day3", "Day3", "Day3", "Day3")

Without normalization:

pca_wn <- prcomp(t(matrix2$counts), center = TRUE,scale. = FALSE)

ggbiplot(pca_wn, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1"  )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_wn, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1"  )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_wn, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_wn, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups =  sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

plotMDS(matrix2, method="bcv", col = c("purple", "purple", "dodgerblue",
                                       "dodgerblue","green3", "coral1",
                                       "dodgerblue", "green3", "coral1",
                                       "coral1", "dodgerblue", "green3"))
## Note: the bcv method is now scheduled to be removed in a future release of edgeR.

plotMDS(matrix2, method="bcv", col = c(rep("red", 3),
                                       rep("slateblue4",2), 
                                       rep( "darkgoldenrod1", 3), 
                                       rep("turquoise1",4)))
## Note: the bcv method is now scheduled to be removed in a future release of edgeR.

design <- model.matrix(~ 0 + condition + sorting)
design
##    conditionMCT-12h conditionMCT-72h conditionNT conditionPT sortingDay2
## 1                 1                0           0           0           0
## 2                 1                0           0           0           0
## 3                 0                0           1           0           0
## 4                 0                0           1           0           0
## 5                 0                1           0           0           0
## 6                 0                0           0           1           1
## 7                 0                0           1           0           1
## 8                 0                1           0           0           1
## 9                 0                0           0           1           0
## 10                0                0           0           1           0
## 11                0                0           1           0           0
## 12                0                1           0           0           0
##    sortingDay3 sortingDay4
## 1            0           1
## 2            0           1
## 3            0           1
## 4            0           0
## 5            0           0
## 6            0           0
## 7            0           0
## 8            0           0
## 9            1           0
## 10           1           0
## 11           1           0
## 12           1           0
## attr(,"assign")
## [1] 1 1 1 1 2 2 2
## attr(,"contrasts")
## attr(,"contrasts")$condition
## [1] "contr.treatment"
## 
## attr(,"contrasts")$sorting
## [1] "contr.treatment"
colnames(design) <- c("MCT-12h", "MCT-72h", "NT", "PT", "Day2", "Day3", "Day4")
design
##    MCT-12h MCT-72h NT PT Day2 Day3 Day4
## 1        1       0  0  0    0    0    1
## 2        1       0  0  0    0    0    1
## 3        0       0  1  0    0    0    1
## 4        0       0  1  0    0    0    0
## 5        0       1  0  0    0    0    0
## 6        0       0  0  1    1    0    0
## 7        0       0  1  0    1    0    0
## 8        0       1  0  0    1    0    0
## 9        0       0  0  1    0    1    0
## 10       0       0  0  1    0    1    0
## 11       0       0  1  0    0    1    0
## 12       0       1  0  0    0    1    0
## attr(,"assign")
## [1] 1 1 1 1 2 2 2
## attr(,"contrasts")
## attr(,"contrasts")$condition
## [1] "contr.treatment"
## 
## attr(,"contrasts")$sorting
## [1] "contr.treatment"
v <- voom(matrix2, design, plot=TRUE)

v$E[1:5,1:5]
##           MCT1     MCT3      NT1    S1-NT    S2-MCT
## Cxcl2 12.60505 12.56827 10.91139 13.88836 14.527863
## Lyz2  11.72530 11.36412 14.07322 15.82071 15.883553
## Ccl5  14.59725 14.53721 10.59526 10.51983  8.240032
## Cd74  13.47223 13.52302 14.33849 14.12283 14.231144
## H2-Aa 12.59702 12.59058 13.09476 12.87849 12.815343
df <- data.frame(genes = rep(rownames(v$E), 12),
                 sample = rep(colnames(v$E),each = 3000),
                 value = c(v$E[,1], v$E[,2], v$E[,3], v$E[,4], v$E[,5], v$E[,6], v$E[,7], v$E[,8], v$E[,9],
                           v$E[,10], v$E[,11], v$E[,12])
                 )
df
ggplot(df, aes(x=sample, y=value)) + 
  geom_violin() +
geom_jitter(shape=16, position=position_jitter(0.2), size = 0.1)

After normalization for library size:

pca_n <- prcomp(t(v$E), center = TRUE,scale. = FALSE)

ggbiplot(pca_n, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1"  )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_n, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1" )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_n, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_n, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups =  sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

plotMDS(v$E, col = c("purple", "purple", "dodgerblue", 
                     "dodgerblue","green3", "coral1",
                                       "dodgerblue", "green3", "coral1",
                                       "coral1", "dodgerblue", "green3"))

plotMDS(v$E, col = c(rep("red", 3),rep("slateblue4",2), rep( "darkgoldenrod1", 3), rep("turquoise1",4)))

# Batch effect correction - sorting

bec <- removeBatchEffect(v$E, batch = sorting)
bec[1:5,1:5]
##           MCT1     MCT3       NT1    S1-NT    S2-MCT
## Cxcl2 14.16985 14.13306 12.476182 13.27328 13.912781
## Lyz2  14.02041 13.65923 16.368329 14.65124 14.714077
## Ccl5  11.89856 11.83853  7.896577 11.68446  9.404656
## Cd74  13.68660 13.73740 14.552868 13.93813 14.046447
## H2-Aa 12.51795 12.51151 13.015692 12.71329 12.650140
df2 <- data.frame(genes = rep(rownames(bec), 12),
                 sample = rep(colnames(bec),each = 3000),
                 value = c(bec[,1], bec[,2], bec[,3], bec[,4], bec[,5], bec[,6], bec[,7], bec[,8], bec[,9],
                           bec[,10], bec[,11], bec[,12])
                 )
df2
ggplot(df2, aes(x=sample, y=value)) + 
  geom_violin() +
geom_jitter(shape=16, position=position_jitter(0.2), size = 0.1)

pca_b <- prcomp(t(bec), center = TRUE,scale. = FALSE)

ggbiplot(pca_b, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1" )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1" )) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups =  sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

plotMDS(bec, col = c("purple","purple","dodgerblue","dodgerblue","green3", "coral1",
                                       "dodgerblue", "green3", "coral1",
                                       "coral1", "dodgerblue", "green3"))

plotMDS(bec, col = c(rep("red", 3),rep("slateblue4",2), rep( "darkgoldenrod1", 3), rep("turquoise1",4)))

Batch effect correction - dataset

bec2 <- removeBatchEffect(v$E, batch = c("Dataset2", "Dataset2", "Dataset2",
                                        rep("Dataset1", 9)))
bec2[1:5,1:5]
##           MCT1     MCT3       NT1    S1-NT   S2-MCT
## Cxcl2 13.64213 13.60534 11.948458 12.85129 13.49079
## Lyz2  13.23360 12.87241 15.581517 14.31242 14.37526
## Ccl5  12.83596 12.77592  8.833969 12.28113 10.00132
## Cd74  13.61336 13.66415 14.479622 13.98170 14.09001
## H2-Aa 12.53220 12.52576 13.029949 12.94331 12.88016
df3 <- data.frame(genes = rep(rownames(bec2), 12),
                 sample = rep(colnames(bec2),each = 3000),
                 value = c(bec2[,1], bec2[,2], bec2[,3], bec2[,4], bec2[,5], bec2[,6], bec2[,7], bec2[,8], bec2[,9],
                           bec2[,10], bec2[,11], bec2[,12])
                 )
df3
ggplot(df3, aes(x=sample, y=value)) + 
  geom_violin() +
geom_jitter(shape=16, position=position_jitter(0.2), size = 0.1)

pca_b2 <- prcomp(t(bec2), center = TRUE,scale. = FALSE)

ggbiplot(pca_b2, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b2, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups = condition, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("purple","green3" , "cornflowerblue", "coral1")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b2, labels.size = 5, var.axes = FALSE, 
         choices = c(1,2),
         groups = sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

ggbiplot(pca_b2, labels.size = 5, var.axes = FALSE, 
         choices = c(2,3),
         groups =  sorting, 
         ellipse = TRUE) + 
  scale_color_manual(values=c("cyan","blue","orange", "red")) + 
   theme(text = element_text(size=17)) 

plotMDS(bec2, col = c("purple","purple","dodgerblue","dodgerblue","green3", "coral1",
                                       "dodgerblue", "green3", "coral1",
                                       "coral1", "dodgerblue", "green3"))

plotMDS(bec2, col = c(rep("red", 3),rep("slateblue4",2), rep( "darkgoldenrod1", 3), rep("turquoise1",4)))

Heatmaps

annotColumn1 <- data.frame(condition = condition)
rownames(annotColumn1) <- colnames(bec)                          
annotColumn2 <- data.frame(condition = condition,
                           sorting  = sorting)
rownames(annotColumn2) <- colnames(bec)                          
colors1 = list(condition = c("MCT-72h"= "green3" , NT = "cornflowerblue", "MCT-12h" = "#CD0089",
                             "PT" = "coral1"))
colors2 = list(condition = c("MCT-72h" = "green3" , NT = "cornflowerblue", "MCT-12h" = "#CD0089", PT = "coral1" ),
              sorting = c("Day1" = "slateblue4", "Day2"= "darkgoldenrod1", "Day3" = "turquoise1",
                          "Day4" = "red"))
pheatmap(bec,
    col = magma(10),
    cluster_rows = TRUE,
    cluster_cols = TRUE,
    cutree_cols = 3,
    annotation_col = annotColumn1,
    annotation_colors = colors1,
    scale = "row",
    fontsize = 17,
    show_rownames = FALSE,
    row_names_side = "left",
    column_title_side = "bottom",
    treeheight_row  = 0
    #rect_gp = gpar(col = "white")
    )

pheatmap(bec,
    col = magma(10),
    cluster_rows = TRUE,
    cluster_cols = TRUE,
    cutree_cols = 3,
    annotation_col = annotColumn2,
    annotation_colors = colors2,
    scale = "row",
    fontsize = 12,
    show_rownames = FALSE,
    row_names_side = "left",
    column_title_side = "bottom",
    treeheight_row = 0)

#saveRDS(bec, "/mnt/nmorais-nfs/marta/pA_karine/r_session/e12h-preliminary-analysis/pseudobulk/data/mat_bec.rds")
devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.1.2 (2021-11-01)
##  os       Ubuntu 18.04.6 LTS
##  system   x86_64, linux-gnu
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Europe/Lisbon
##  date     2024-07-02
##  pandoc   2.11.4 @ /usr/lib/rstudio-server/bin/pandoc/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package              * version   date (UTC) lib source
##  abind                  1.4-5     2016-07-21 [1] CRAN (R 4.0.2)
##  beachmat               2.10.0    2021-10-26 [1] Bioconductor
##  Biobase              * 2.54.0    2021-10-26 [1] Bioconductor
##  BiocGenerics         * 0.40.0    2021-10-26 [1] Bioconductor
##  BiocNeighbors          1.12.0    2021-10-26 [1] Bioconductor
##  BiocParallel           1.28.3    2021-12-09 [1] Bioconductor
##  BiocSingular           1.10.0    2021-10-26 [1] Bioconductor
##  bitops                 1.0-7     2021-04-24 [1] CRAN (R 4.0.5)
##  bslib                  0.6.1     2023-11-28 [1] CRAN (R 4.1.2)
##  cachem                 1.0.8     2023-05-01 [1] CRAN (R 4.1.2)
##  callr                  3.7.3     2022-11-02 [1] CRAN (R 4.1.2)
##  circlize               0.4.15    2022-05-10 [1] CRAN (R 4.1.2)
##  cli                    3.6.2     2023-12-11 [1] CRAN (R 4.1.2)
##  clue                   0.3-64    2023-01-31 [1] CRAN (R 4.1.2)
##  cluster                2.1.4     2022-08-22 [1] CRAN (R 4.1.2)
##  codetools              0.2-18    2020-11-04 [3] CRAN (R 4.0.3)
##  colorspace             2.1-0     2023-01-23 [1] CRAN (R 4.1.2)
##  ComplexHeatmap       * 2.10.0    2021-10-26 [1] Bioconductor
##  cowplot                1.1.1     2020-12-30 [1] CRAN (R 4.1.2)
##  crayon                 1.5.2     2022-09-29 [1] CRAN (R 4.1.2)
##  data.table             1.15.2    2024-02-29 [1] CRAN (R 4.1.2)
##  DelayedArray           0.20.0    2021-10-26 [1] Bioconductor
##  DelayedMatrixStats     1.16.0    2021-10-26 [1] Bioconductor
##  deldir                 1.0-6     2021-10-23 [1] CRAN (R 4.1.0)
##  devtools               2.4.5     2022-10-11 [1] CRAN (R 4.1.2)
##  digest                 0.6.34    2024-01-11 [1] CRAN (R 4.1.2)
##  doParallel             1.0.17    2022-02-07 [1] CRAN (R 4.1.2)
##  dplyr                * 1.1.4     2023-11-17 [1] CRAN (R 4.1.2)
##  edgeR                * 3.36.0    2021-10-26 [1] Bioconductor
##  ellipsis               0.3.2     2021-04-29 [1] CRAN (R 4.0.5)
##  evaluate               0.23      2023-11-01 [1] CRAN (R 4.1.2)
##  fansi                  1.0.6     2023-12-08 [1] CRAN (R 4.1.2)
##  farver                 2.1.1     2022-07-06 [1] CRAN (R 4.1.2)
##  fastmap                1.1.1     2023-02-24 [1] CRAN (R 4.1.2)
##  fitdistrplus           1.1-8     2022-03-10 [1] CRAN (R 4.1.2)
##  foreach                1.5.2     2022-02-02 [1] CRAN (R 4.1.2)
##  fs                     1.6.3     2023-07-20 [1] CRAN (R 4.1.2)
##  future                 1.31.0    2023-02-01 [1] CRAN (R 4.1.2)
##  future.apply           1.10.0    2022-11-05 [1] CRAN (R 4.1.2)
##  generics               0.1.3     2022-07-05 [1] CRAN (R 4.1.2)
##  GenomeInfoDb         * 1.30.1    2022-01-30 [1] Bioconductor
##  GenomeInfoDbData       1.2.7     2022-03-28 [1] Bioconductor
##  GenomicRanges        * 1.46.1    2021-11-18 [1] Bioconductor
##  GetoptLong             1.0.5     2020-12-15 [1] CRAN (R 4.0.3)
##  ggbiplot             * 0.55      2020-10-27 [1] Github (vqv/ggbiplot@7325e88)
##  ggplot2              * 3.4.2     2023-04-03 [1] CRAN (R 4.1.2)
##  ggrepel                0.9.5     2024-01-10 [1] CRAN (R 4.1.2)
##  ggridges               0.5.6     2024-01-23 [1] CRAN (R 4.1.2)
##  GlobalOptions          0.1.2     2020-06-10 [1] CRAN (R 4.0.3)
##  globals                0.16.2    2022-11-21 [1] CRAN (R 4.1.2)
##  glue                   1.7.0     2024-01-09 [1] CRAN (R 4.1.2)
##  goftest                1.2-3     2021-10-07 [1] CRAN (R 4.1.0)
##  gridExtra              2.3       2017-09-09 [1] CRAN (R 4.0.0)
##  gtable                 0.3.4     2023-08-21 [1] CRAN (R 4.1.2)
##  highr                  0.10      2022-12-22 [1] CRAN (R 4.1.2)
##  htmltools              0.5.7     2023-11-03 [1] CRAN (R 4.1.2)
##  htmlwidgets            1.6.4     2023-12-06 [1] CRAN (R 4.1.2)
##  httpuv                 1.6.14    2024-01-26 [1] CRAN (R 4.1.2)
##  httr                   1.4.4     2022-08-17 [1] CRAN (R 4.1.2)
##  ica                    1.0-3     2022-07-08 [1] CRAN (R 4.1.2)
##  igraph                 1.3.5     2022-09-22 [1] CRAN (R 4.1.2)
##  IRanges              * 2.28.0    2021-10-26 [1] Bioconductor
##  irlba                  2.3.5.1   2022-10-03 [1] CRAN (R 4.1.2)
##  iterators              1.0.14    2022-02-05 [1] CRAN (R 4.1.2)
##  jquerylib              0.1.4     2021-04-26 [1] CRAN (R 4.0.5)
##  jsonlite               1.8.8     2023-12-04 [1] CRAN (R 4.1.2)
##  KernSmooth             2.23-20   2021-05-03 [3] CRAN (R 4.0.5)
##  knitr                  1.45      2023-10-30 [1] CRAN (R 4.1.2)
##  labeling               0.4.3     2023-08-29 [1] CRAN (R 4.1.2)
##  later                  1.3.2     2023-12-06 [1] CRAN (R 4.1.2)
##  lattice                0.20-45   2021-09-22 [3] CRAN (R 4.1.1)
##  lazyeval               0.2.2     2019-03-15 [1] CRAN (R 4.0.0)
##  leiden                 0.4.3     2022-09-10 [1] CRAN (R 4.1.2)
##  lifecycle              1.0.4     2023-11-07 [1] CRAN (R 4.1.2)
##  limma                * 3.50.3    2022-04-07 [1] Bioconductor
##  listenv                0.9.0     2022-12-16 [1] CRAN (R 4.1.2)
##  lmtest                 0.9-40    2022-03-21 [1] CRAN (R 4.1.2)
##  locfit                 1.5-9.7   2023-01-02 [1] CRAN (R 4.1.2)
##  magrittr             * 2.0.3     2022-03-30 [1] CRAN (R 4.1.2)
##  MASS                   7.3-58.2  2023-01-23 [1] CRAN (R 4.1.2)
##  Matrix                 1.5-3     2022-11-11 [1] CRAN (R 4.1.2)
##  MatrixGenerics       * 1.6.0     2021-10-26 [1] Bioconductor
##  matrixStats          * 0.63.0    2022-11-18 [1] CRAN (R 4.1.2)
##  memoise                2.0.1     2021-11-26 [1] CRAN (R 4.1.2)
##  mgcv                   1.8-41    2022-10-21 [1] CRAN (R 4.1.2)
##  mime                   0.12      2021-09-28 [1] CRAN (R 4.1.0)
##  miniUI                 0.1.1.1   2018-05-18 [1] CRAN (R 4.0.0)
##  munsell                0.5.0     2018-06-12 [1] CRAN (R 4.0.0)
##  nlme                   3.1-162   2023-01-31 [1] CRAN (R 4.1.2)
##  parallelly             1.34.0    2023-01-13 [1] CRAN (R 4.1.2)
##  patchwork              1.2.0     2024-01-08 [1] CRAN (R 4.1.2)
##  pbapply                1.7-0     2023-01-13 [1] CRAN (R 4.1.2)
##  pheatmap             * 1.0.12    2019-01-04 [1] CRAN (R 4.0.3)
##  pillar                 1.9.0     2023-03-22 [1] CRAN (R 4.1.2)
##  pkgbuild               1.4.0     2022-11-27 [1] CRAN (R 4.1.2)
##  pkgconfig              2.0.3     2019-09-22 [1] CRAN (R 4.0.0)
##  pkgload                1.3.2     2022-11-16 [1] CRAN (R 4.1.2)
##  plotly                 4.10.1    2022-11-07 [1] CRAN (R 4.1.2)
##  plyr                 * 1.8.9     2023-10-02 [1] CRAN (R 4.1.2)
##  png                    0.1-8     2022-11-29 [1] CRAN (R 4.1.2)
##  polyclip               1.10-4    2022-10-20 [1] CRAN (R 4.1.2)
##  prettyunits            1.1.1     2020-01-24 [1] CRAN (R 4.0.0)
##  processx               3.8.0     2022-10-26 [1] CRAN (R 4.1.2)
##  profvis                0.3.7     2020-11-02 [1] CRAN (R 4.0.3)
##  progressr              0.13.0    2023-01-10 [1] CRAN (R 4.1.2)
##  promises               1.2.1     2023-08-10 [1] CRAN (R 4.1.2)
##  ps                     1.7.2     2022-10-26 [1] CRAN (R 4.1.2)
##  purrr                  1.0.2     2023-08-10 [1] CRAN (R 4.1.2)
##  R6                     2.5.1     2021-08-19 [1] CRAN (R 4.1.0)
##  RANN                   2.6.1     2019-01-08 [1] CRAN (R 4.0.3)
##  RColorBrewer           1.1-3     2022-04-03 [1] CRAN (R 4.1.2)
##  Rcpp                   1.0.12    2024-01-09 [1] CRAN (R 4.1.2)
##  RcppAnnoy              0.0.20    2022-10-27 [1] CRAN (R 4.1.2)
##  RCurl                  1.98-1.10 2023-01-27 [1] CRAN (R 4.1.2)
##  remotes                2.4.2.1   2023-07-18 [1] CRAN (R 4.1.2)
##  reshape2               1.4.4     2020-04-09 [1] CRAN (R 4.0.2)
##  reticulate             1.26      2022-08-31 [1] CRAN (R 4.1.2)
##  rjson                  0.2.21    2022-01-09 [1] CRAN (R 4.1.2)
##  rlang                  1.1.3     2024-01-10 [1] CRAN (R 4.1.2)
##  rmarkdown              2.26      2024-03-05 [1] CRAN (R 4.1.2)
##  ROCR                   1.0-11    2020-05-02 [1] CRAN (R 4.0.3)
##  rpart                  4.1.19    2022-10-21 [1] CRAN (R 4.1.2)
##  rstudioapi             0.15.0    2023-07-07 [1] CRAN (R 4.1.2)
##  rsvd                   1.0.5     2021-04-16 [1] CRAN (R 4.0.5)
##  Rtsne                  0.16      2022-04-17 [1] CRAN (R 4.1.2)
##  S4Vectors            * 0.32.4    2022-03-24 [1] Bioconductor
##  sass                   0.4.8     2023-12-06 [1] CRAN (R 4.1.2)
##  ScaledMatrix           1.2.0     2021-10-26 [1] Bioconductor
##  scales               * 1.3.0     2023-11-28 [1] CRAN (R 4.1.2)
##  scattermore            0.8       2022-02-14 [1] CRAN (R 4.1.2)
##  sctransform            0.3.5     2022-09-21 [1] CRAN (R 4.1.2)
##  sessioninfo            1.2.2     2021-12-06 [1] CRAN (R 4.1.2)
##  Seurat               * 4.1.1     2022-05-02 [1] CRAN (R 4.1.2)
##  SeuratObject         * 4.1.3     2022-11-07 [1] CRAN (R 4.1.2)
##  shape                  1.4.6     2021-05-19 [1] CRAN (R 4.1.0)
##  shiny                  1.8.0     2023-11-17 [1] CRAN (R 4.1.2)
##  SingleCellExperiment * 1.16.0    2021-10-26 [1] Bioconductor
##  SingleR              * 1.8.1     2022-01-27 [1] Bioconductor
##  sp                     1.6-0     2023-01-19 [1] CRAN (R 4.1.2)
##  sparseMatrixStats      1.6.0     2021-10-26 [1] Bioconductor
##  spatstat.core          2.4-4     2022-05-18 [1] CRAN (R 4.1.2)
##  spatstat.data          3.0-0     2022-10-21 [1] CRAN (R 4.1.2)
##  spatstat.geom          3.0-6     2023-01-30 [1] CRAN (R 4.1.2)
##  spatstat.random        3.1-3     2023-01-25 [1] CRAN (R 4.1.2)
##  spatstat.sparse        3.0-0     2022-10-21 [1] CRAN (R 4.1.2)
##  spatstat.utils         3.0-1     2022-10-19 [1] CRAN (R 4.1.2)
##  stringi                1.8.3     2023-12-11 [1] CRAN (R 4.1.2)
##  stringr                1.5.1     2023-11-14 [1] CRAN (R 4.1.2)
##  SummarizedExperiment * 1.24.0    2021-10-26 [1] Bioconductor
##  survival               3.5-0     2023-01-09 [1] CRAN (R 4.1.2)
##  tensor                 1.5       2012-05-05 [1] CRAN (R 4.0.3)
##  tibble                 3.2.1     2023-03-20 [1] CRAN (R 4.1.2)
##  tidyr                  1.3.1     2024-01-24 [1] CRAN (R 4.1.2)
##  tidyselect             1.2.0     2022-10-10 [1] CRAN (R 4.1.2)
##  urlchecker             1.0.1     2021-11-30 [1] CRAN (R 4.1.2)
##  usethis                2.1.6     2022-05-25 [1] CRAN (R 4.1.2)
##  utf8                   1.2.4     2023-10-22 [1] CRAN (R 4.1.2)
##  uwot                   0.1.14    2022-08-22 [1] CRAN (R 4.1.2)
##  vctrs                  0.6.5     2023-12-01 [1] CRAN (R 4.1.2)
##  viridis              * 0.6.2     2021-10-13 [1] CRAN (R 4.1.0)
##  viridisLite          * 0.4.2     2023-05-02 [1] CRAN (R 4.1.2)
##  withr                  3.0.0     2024-01-16 [1] CRAN (R 4.1.2)
##  xfun                   0.42      2024-02-08 [1] CRAN (R 4.1.2)
##  xtable                 1.8-4     2019-04-21 [1] CRAN (R 4.0.0)
##  XVector                0.34.0    2021-10-26 [1] Bioconductor
##  yaml                   2.3.8     2023-12-11 [1] CRAN (R 4.1.2)
##  zlibbioc               1.40.0    2021-10-26 [1] Bioconductor
##  zoo                    1.8-12    2023-04-13 [1] CRAN (R 4.1.2)
## 
##  [1] /usr/local/lib/R/site-library
##  [2] /usr/lib/R/site-library
##  [3] /usr/lib/R/library
## 
## ──────────────────────────────────────────────────────────────────────────────